﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;

namespace OffInvoiceExcelAddIn.FacturaeFiles
{
    /// <summary>
    /// Clase que contiene el listado de los ContentControls presentes en el documento de plantilla de facturae
    /// </summary>
    /// <remarks>
    /// Permite accesar rápidamente el nombre de los controles
    /// </remarks>
    public class ControlList
    {
        /// <summary>
        /// Enumeración con los tag de los controles de la plantilla
        /// </summary>
        public enum Tag
        {
            /// <summary>
            /// Tag que identifica al control customPartId de la plantilla
            /// </summary>
            customPartId,

            /// <summary>
            /// Tag que identifica al control SchemaVersion de la plantilla
            /// </summary>
            SchemaVersion,

            /// <summary>
            /// Tag que identifica al control Modality de la plantilla
            /// </summary>
            Modality,

            /// <summary>
            /// Tag que identifica al control InvoiceIssuerType de la plantilla
            /// </summary>
            [XmlEnumAttribute("Emisor de la Factura")]
            InvoiceIssuerType,

            /// <summary>
            /// Tag que identifica al control CorporateImage de la plantilla
            /// </summary>
            [XmlEnumAttribute("Logotipo")]
            CorporateImage,
            //thirdparty elements

            /// <summary>
            /// Tag que identifica al control TH_PersonTypeCode de la plantilla
            /// </summary>
            [XmlEnumAttribute("Tipo de Persona del Tercero")]
            TH_PersonTypeCode,

            /// <summary>
            /// Tag que identifica al control TH_ResidenceTypeCode de la plantilla
            /// </summary>
            [XmlEnumAttribute("Tipo de Residente del Tercero")]
            TH_ResidenceTypeCode,
            /// <summary>
            /// Tag que identifica al control TH_TaxIdentificationNumber de la plantilla
            /// </summary>
            [XmlEnumAttribute("CIF del Tercero")]
            TH_TaxIdentificationNumber,

            /// <summary>
            /// Tag que identifica al control TH_CorporateName de la plantilla
            /// </summary>
            [XmlEnumAttribute("Nombre  de la Empresa del Tercero")]
            TH_CorporateName,

            /// <summary>
            /// Tag que identifica al control TH_TradeName de la plantilla
            /// </summary>
            [XmlEnumAttribute("Nombre Comercial del Tercero")]
            TH_TradeName,

            /// <summary>
            /// Tag que identifica al control TH_Address de la plantilla
            /// </summary>
            [XmlEnumAttribute("Dirección del Tercero")]
            TH_Address,

            /// <summary>
            /// Tag que identifica al control TH_PostCode de la plantilla
            /// </summary>
            [XmlEnumAttribute("Código Postal del Tercero")]
            TH_PostCode,

            /// <summary>
            /// Tag que identifica al control TH_Town de la plantilla
            /// </summary>
            [XmlEnumAttribute("Población del Tercero")]
            TH_Town,

            /// <summary>
            /// Tag que identifica al control TH_Province de la plantilla
            /// </summary>
            [XmlEnumAttribute("Provincia del Tercero")]
            TH_Province,

            /// <summary>
            /// Tag que identifica al control TH_CountryCode de la plantilla
            /// </summary>
            [XmlEnumAttribute("País del Tercero")]
            TH_CountryCode,

            /// <summary>
            /// Tag que identifica al control TH_Telephone de la plantilla
            /// </summary>
            [XmlEnumAttribute("Teléfono del Tercero")]
            TH_Telephone,

            /// <summary>
            /// Tag que identifica al control TH_TeleFax de la plantilla
            /// </summary>
            [XmlEnumAttribute("Teléfax del Tercero")]
            TH_TeleFax,

            /// <summary>
            /// Tag que identifica al control TH_WebAddress de la plantilla
            /// </summary>
            [XmlEnumAttribute("Sitio Web del Tercero")]
            TH_WebAddress,

            /// <summary>
            /// Tag que identifica al control TH_Email de la plantilla
            /// </summary>
            [XmlEnumAttribute("Email del Tercero")]
            TH_Email,

            /// <summary>
            /// Tag que identifica al control TH_ContactPersons de la plantilla
            /// </summary>
            [XmlEnumAttribute("Contacto del Tercero")]
            TH_ContactPersons,

            /// <summary>
            /// Tag que identifica al control TH_Name de la plantilla
            /// </summary>
            [XmlEnumAttribute("Nombre del Tercero")]
            TH_Name,

            /// <summary>
            /// Tag que identifica al control TH_FirstSurname de la plantilla
            /// </summary>
            [XmlEnumAttribute("Primer Apellido del Tercero")]
            TH_FirstSurname,

            /// <summary>
            /// Tag que identifica al control TH_SecondSurname de la plantilla
            /// </summary>
            [XmlEnumAttribute("Segundo Apellido del Tercero")]
            TH_SecondSurname,

            /// <summary>
            /// Tag que identifica al control TH_ContactDetails de la plantilla
            /// </summary>
            TH_ContactDetails,

            //batch elements

            /// <summary>
            /// Tag que identifica al control BCH_InvoiceCurrencyCode de la plantilla
            /// </summary>
            BCH_InvoiceCurrencyCode,


            //sellerparty elements

            /// <summary>
            /// Tag que identifica al control SP_PersonTypeCode de la plantilla
            /// </summary>
            [XmlEnumAttribute("Tipo de Persona del Emisor")]
            SP_PersonTypeCode,

            /// <summary>
            /// Tag que identifica al control SP_ResidenceTypeCode de la plantilla
            /// </summary>
            [XmlEnumAttribute("Tipo de Residente del Emisor")]
            SP_ResidenceTypeCode,

            /// <summary>
            /// Tag que identifica al control SP_TaxIdentificationNumber de la plantilla
            /// </summary>
            [XmlEnumAttribute("CIF del Emisor")]
            SP_TaxIdentificationNumber,

            /// <summary>
            /// Tag que identifica al control SP_PartyIdentification de la plantilla
            /// </summary>
            SP_PartyIdentification,

            /// <summary>
            /// Tag que identifica al control SP_CorporateName de la plantilla
            /// </summary>
            [XmlEnumAttribute("Nombre de la empresa del Emisor")]
            SP_CorporateName,

            /// <summary>
            /// Tag que identifica al control SP_TradeName de la plantilla
            /// </summary>
            [XmlEnumAttribute("Nombre Comercial del Emisor")]
            SP_TradeName,

            /// <summary>
            /// Tag que identifica al control SP_Address de la plantilla
            /// </summary>
            [XmlEnumAttribute("Dirección del Emisor")]
            SP_Address,

            /// <summary>
            /// Tag que identifica al control SP_PostCode de la plantilla
            /// </summary>
            [XmlEnumAttribute("Código Postal del Emisor")]
            SP_PostCode,

            /// <summary>
            /// Tag que identifica al control SP_Town de la plantilla
            /// </summary>
            [XmlEnumAttribute("Población del Emisor")]
            SP_Town,

            /// <summary>
            /// Tag que identifica al control SP_Province de la plantilla
            /// </summary>
            [XmlEnumAttribute("Provincia del Emisor")]
            SP_Province,

            /// <summary>
            /// Tag que identifica al control SP_CountryCode de la plantilla
            /// </summary>
            [XmlEnumAttribute("País del Emisor")]
            SP_CountryCode,

            /// <summary>
            /// Tag que identifica al control SP_Telephone de la plantilla
            /// </summary>
            [XmlEnumAttribute("Teléfono del Emisor")]
            SP_Telephone,

            /// <summary>
            /// Tag que identifica al control SP_TeleFax de la plantilla
            /// </summary>
            [XmlEnumAttribute("Telefax del Emisor")]
            SP_TeleFax,

            /// <summary>
            /// Tag que identifica al control SP_WebAddress de la plantilla
            /// </summary>
            [XmlEnumAttribute("Sitio Web del Emisor")]
            SP_WebAddress,

            /// <summary>
            /// Tag que identifica al control SP_email de la plantilla
            /// </summary>
            [XmlEnumAttribute("Email del Emisor")]
            SP_email,

            /// <summary>
            /// Tag que identifica al control SP_ContactPersons de la plantilla
            /// </summary>
            [XmlEnumAttribute("Contacto del Emisor")]
            SP_ContactPersons,


            //individual

            /// <summary>
            /// Tag que identifica al control SP_Name de la plantilla
            /// </summary>
            [XmlEnumAttribute("Nombre del Emisor")]
            SP_Name,

            /// <summary>
            /// Tag que identifica al control SP_FirstSurname de la plantilla
            /// </summary>
            [XmlEnumAttribute("Primer Apellido del Emisor")]
            SP_FirstSurname,

            /// <summary>
            /// Tag que identifica al control SP_SecondSurname de la plantilla
            /// </summary>
            [XmlEnumAttribute("Segundo del Emisor")]
            SP_SecondSurname,


            //buyerparty elements

            /// <summary>
            /// Tag que identifica al control BP_PersonTypeCode de la plantilla
            /// </summary>
            [XmlEnumAttribute("Tipo de Persona del Cliente")]
            BP_PersonTypeCode,

            /// <summary>
            /// Tag que identifica al control BP_ResidenceTypeCode de la plantilla
            /// </summary>
            [XmlEnumAttribute("Tipo de Residente del Cliente")]
            BP_ResidenceTypeCode,

            /// <summary>
            /// Tag que identifica al control BP_TaxIdentificationNumber de la plantilla
            /// </summary>
            [XmlEnumAttribute("CIF del Cliente")]
            BP_TaxIdentificationNumber,

            /// <summary>
            /// Tag que identifica al control BP_PartyIdentification de la plantilla
            /// </summary>
            BP_PartyIdentification,

            /// <summary>
            /// Tag que identifica al control BP_CorporateName de la plantilla
            /// </summary>
            [XmlEnumAttribute("Nombre de la Empresa del Cliente")]
            BP_CorporateName,

            /// <summary>
            /// Tag que identifica al control BP_TradeName de la plantilla
            /// </summary>
            [XmlEnumAttribute("Nombre Comercial del Cliente")]
            BP_TradeName,

            /// <summary>
            /// Tag que identifica al control BP_Address de la plantilla
            /// </summary>
            [XmlEnumAttribute("Dirección del Cliente")]
            BP_Address,

            /// <summary>
            /// Tag que identifica al control BP_PostCode de la plantilla
            /// </summary>
            [XmlEnumAttribute("Código Postal del Cliente")]
            BP_PostCode,

            /// <summary>
            /// Tag que identifica al control BP_Town de la plantilla
            /// </summary>
            [XmlEnumAttribute("Población del Cliente")]
            BP_Town,

            /// <summary>
            /// Tag que identifica al control BP_Province de la plantilla
            /// </summary>
            [XmlEnumAttribute("Provincia del Cliente")]
            BP_Province,

            /// <summary>
            /// Tag que identifica al control BP_CountryCode de la plantilla
            /// </summary>
            [XmlEnumAttribute("País del Cliente")]
            BP_CountryCode,

            /// <summary>
            /// Tag que identifica al control BP_Telephone de la plantilla
            /// </summary>
            [XmlEnumAttribute("Teléfono del Cliente")]
            BP_Telephone,

            /// <summary>
            /// Tag que identifica al control BP_TeleFax de la plantilla
            /// </summary>
            [XmlEnumAttribute("Telefax del Cliente")]
            BP_TeleFax,

            /// <summary>
            /// Tag que identifica al control BP_WebAddress de la plantilla
            /// </summary>
            [XmlEnumAttribute("Sitio Web del Cliente")]
            BP_WebAddress,

            /// <summary>
            /// Tag que identifica al control BP_email de la plantilla
            /// </summary>
            [XmlEnumAttribute("Email del Cliente")]
            BP_email,

            /// <summary>
            /// Tag que identifica al control BP_ContactPersons de la plantilla
            /// </summary>
            [XmlEnumAttribute("Contacto del Cliente")]
            BP_ContactPersons,



            //individual
            /// <summary>
            /// Tag que identifica al control BP_Name de la plantilla
            /// </summary>
            [XmlEnumAttribute("Nombre del Cliente")]
            BP_Name,

            /// <summary>
            /// Tag que identifica al control BP_FirstSurname de la plantilla
            /// </summary>
            [XmlEnumAttribute("Primer Apellido del Cliente")]
            BP_FirstSurname,

            /// <summary>
            /// Tag que identifica al control BP_SecondSurname de la plantilla
            /// </summary>
            [XmlEnumAttribute("Segundo Apellido del Cliente")]
            BP_SecondSurname,

            /// <summary>
            /// Tag que identifica al control BP_Item de la plantilla
            /// </summary>
            BP_Item,

            /// <summary>
            /// Tag que identifica al control BP_ContactDetails de la plantilla
            /// </summary>
            BP_ContactDetails,

            //Invoice Elements
            /// <summary>
            /// Tag que identifica al control IH_InvoiceNumber de la plantilla
            /// </summary>
            [XmlEnumAttribute("Número de la Factura")]
            IH_InvoiceNumber,

            /// <summary>
            /// Tag que identifica al control IH_InvoiceSeriesCode de la plantilla
            /// </summary>
            [XmlEnumAttribute("Serie de la Factura")]
            IH_InvoiceSeriesCode,

            /// <summary>
            /// Tag que identifica al control IH_InvoiceDocumentType de la plantilla
            /// </summary>
            [XmlEnumAttribute("Tipo de documento")]
            IH_InvoiceDocumentType,

            /// <summary>
            /// Tag que identifica al control IH_InvoiceClass de la plantilla
            /// </summary>
            [XmlEnumAttribute("Clase de la Factura")]
            IH_InvoiceClass,

            //Invoice Corrective Elements

            /// <summary>
            /// Tag que identifica al control CORR_InvoiceNumber de la plantilla
            /// </summary>
            [XmlEnumAttribute("Número de la Factura a Rectificar")]
            CORR_InvoiceNumber,

            /// <summary>
            /// Tag que identifica al control CORR_InvoiceSeriesCode de la plantilla
            /// </summary>
            [XmlEnumAttribute("Serie de la Factura a Rectificar")]
            CORR_InvoiceSeriesCode,

            /// <summary>
            /// Tag que identifica al control CORR_ReasonCode de la plantilla
            /// </summary>
            CORR_ReasonCode,

            /// <summary>
            /// Tag que identifica al control CORR_ReasonDescription de la plantilla
            /// </summary>
            [XmlEnumAttribute("Motivo de la Rectificación")]
            CORR_ReasonDescription,

            /// <summary>
            /// Tag que identifica al control CORR_TaxPeriod_StartDate de la plantilla
            /// </summary>
            [XmlEnumAttribute("Fecha Inicial de la Rectificacion")]
            CORR_TaxPeriod_StartDate,

            /// <summary>
            /// Tag que identifica al control CORR_TaxPeriod_EndDate de la plantilla
            /// </summary>
            [XmlEnumAttribute("Fecha Final de la Rectificación")]
            CORR_TaxPeriod_EndDate,

            /// <summary>
            /// Tag que identifica al control CORR_CorrectionMethod de la plantilla
            /// </summary>
            CORR_CorrectionMethod,

            /// <summary>
            /// Tag que identifica al control CORR_CorrectionMethodDescription de la plantilla
            /// </summary>
            [XmlEnumAttribute("Método de Rectificación")]
            CORR_CorrectionMethodDescription,

            //InvoiceIssueData

            /// <summary>
            /// Tag que identifica al control InvIssue_IssueDate de la plantilla
            /// </summary>
            [XmlEnumAttribute("Fecha de Emision de la Factura")]
            InvIssue_IssueDate,

            /// <summary>
            /// Tag que identifica al control InvIssue_OperationDate de la plantilla
            /// </summary>
            [XmlEnumAttribute("Fecha de la Operación")]
            InvIssue_OperationDate,

            /// <summary>
            /// Tag que identifica al control InvIssue_PlaceOfIssue_PostCode de la plantilla
            /// </summary>
            [XmlEnumAttribute("Código Postal del Lugar de Emision")]
            InvIssue_PlaceOfIssue_PostCode,

            /// <summary>
            /// Tag que identifica al control InvIssue_PlaceOfIssue_PlaceOfIssueDescription de la plantilla
            /// </summary>
            InvIssue_PlaceOfIssue_PlaceOfIssueDescription,

            /// <summary>
            /// Tag que identifica al control InvIssue_InvoicingPeriod_StartDate de la plantilla
            /// </summary>
            InvIssue_InvoicingPeriod_StartDate,

            /// <summary>
            /// Tag que identifica al control InvIssue_InvoicingPeriod_EndDate de la plantilla
            /// </summary>
            InvIssue_InvoicingPeriod_EndDate,

            /// <summary>
            /// Tag que identifica al control InvIssue_InvoiceCurrencyCode de la plantilla
            /// </summary>
            [XmlEnumAttribute("Moneda")]
            InvIssue_InvoiceCurrencyCode,

            /// <summary>
            /// Tag que identifica al control ExchangeRate de la plantilla
            /// </summary>
            [XmlEnumAttribute("Tipo de Cambio")]
            ExchangeRate,

            /// <summary>
            /// Tag que identifica al control InvIssue_ExchangeRateDetails_ExchangeRate de la plantilla
            /// </summary>
            InvIssue_ExchangeRateDetails_ExchangeRate,

            /// <summary>
            /// Tag que identifica al control InvIssue_ExchangeRateDetails_ExchangeRateDate de la plantilla
            /// </summary>
            InvIssue_ExchangeRateDetails_ExchangeRateDate,

            /// <summary>
            /// Tag que identifica al control InvIssue_TaxCurrencyCode de la plantilla
            /// </summary>
            [XmlEnumAttribute("Moneda")]
            InvIssue_TaxCurrencyCode,

            /// <summary>
            /// Tag que identifica al control InvIssue_LanguageName de la plantilla
            /// </summary>
            InvIssue_LanguageName,

            /// <summary>
            /// Tag que identifica al control InvoiceAdditionalInformation de la plantilla
            /// </summary>
            InvoiceAdditionalInformation,

            /// <summary>
            /// Tag que identifica al control Inst_InstallmentDueDate de la plantilla
            /// </summary>
            [XmlEnumAttribute("Fecha de Pago")]
            Inst_InstallmentDueDate,

            /// <summary>
            /// Tag que identifica al control Inst_InstallmentAmount de la plantilla
            /// </summary>
            [XmlEnumAttribute("Monto a Pagar")]
            Inst_InstallmentAmount,

            /// <summary>
            /// Tag que identifica al control Inst_PaymentMeans de la plantilla
            /// </summary>
            [XmlEnumAttribute("Medio de Pago")]
            Inst_PaymentMeans,

            //Control oculto que indica el estado de una factura
            /// <summary>
            /// Tag que identifica al control Status de la plantilla
            /// </summary>
            Status
        }


    }
}
